package bean.dao;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import hbt.HibernateUtil;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import bean.Club;
import bean.Jugador;
import bean.Partido;

import util.Paginado;

public class HibernateCuentasDAO {
	private static HibernateCuentasDAO instancia = null;
	private static SessionFactory sf = null;

	public static HibernateCuentasDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateCuentasDAO();
		} 
		return instancia;
	}

	public void grabarClub(Club c) {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
		
		session.beginTransaction();
		session.persist(c);
		session.getTransaction().commit();
		session.close();
		
	}

	@SuppressWarnings("unchecked")
	public List<Club> obtenerClubes() {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
		List<Club> clubes = session.createQuery("from Club ").list();
		return clubes;
	}

	public Club buscarClub(int i) {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
		
		return (Club) session.get(Club.class, i);
	}

	@SuppressWarnings("unchecked")
	public List<Partido> obtenerPartidos() {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
		List<Partido> partidos = session.createQuery("from Partido c where c.clubL.idClub = 16 and c.golesL =0 order by c.idPartido desc").list();
		return partidos;
	}

	@SuppressWarnings("unchecked")
	public List<Jugador> obtenerJugadores() {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
		List<Jugador> jugadores = session.createQuery("from Jugador").list();
		return jugadores;
	}

	@SuppressWarnings("unchecked")
	public List<Object[]> jugadoresPartidos() {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
		List<Object[]> lista = session.createQuery("select distinct j.nombre, p.nroFecha from Jugador j, Partido p where j.club.idClub = p.clubL.idClub").list();
		return lista;
	}

	@SuppressWarnings("unchecked")
	public List<Object[]> jugadoresPartidosOO() {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
		List<Object[]> lista = (List<Object[]>) session.createQuery("select distinct pa, ju from Partido pa, Jugador ju where ju.club.idClub = pa.clubV.idClub order by pa.idPartido").list();
		return lista;
	}

	@SuppressWarnings({ "unchecked", "static-access" })
	public List<Object[]> partidosPorClub() {
		// TODO Auto-generated method stub
		Session session = sf.openSession();
		List<Object[]> lista = session.createQuery("select c.nombre, count(p.idPartido) from Club c, Partido p where (c.idClub = p.clubV.idClub or c.idClub = p.clubL.idClub ) group by c.nombre having count(p.idPartido) > 14").list();
		return lista;
	}
	
	
	
}
